Networks are used to communicate information, such as packet data, for many different types of applications. Such applications include telecommunications, data networking and storage area networks. In such applications, data switches may be used to route data traffic from multiple inputs to multiple outputs. In data switches fabrics, line cards may be used to receive and transmit data between the multiple inputs and outputs via a data-switch fabric. Such line cards may include one or more data ingress modules and/or one or more data egress modules. For example, a line card may include both an ingress and an egress module.
Using such approaches, data, e.g., packet data, may be routed from ingress modules to egress modules using a data-switch fabric, where each ingress module is operationally coupled with the data-switch fabric using one or more data ingress ports per ingress module. Further, the data-switch fabric is operationally coupled with the egress modules via one or more fabric egress ports per egress module. The data-switch fabric may include one or more fabric elements, or planes.
Such data-switch fabrics may implement data buffer queues that are used to store data while it is being routed through the data-switch fabric from the ingress modules to the egress modules. During periods of heavy data traffic, the data buffer queues in the data-switch fabric may become full, which then results in additional data (e.g., packets) trying to enter the queue being dropped in the data-switch fabric. Such dropping of data may be referred to as “loss” or “fabric-loss.”
Flow control mechanisms may be implemented in the data-switch fabric to reduce or prevent such fabric-loss. For instance, service aware flow control may be used to reduce or prevent fabric-loss. In such an approach, if a data queue in the data-switch fabric associated with a specific egress module becomes congested (i.e., an amount of data stored in the queue exceeds a threshold amount) the data-switch fabric or the destination egress module may send a flow control message to the ingress module or ingress modules sending data that is causing the congestion. In systems using service aware flow control (or any coarse-grained, link-level flow control), the associated ingress modules are directed to stop sending data of the specified class of service. In such an approach, other data flows in the same class of service being communicated by the associated ingress modules (that are not contributing to the congestion) are also stopped. Stopping data flows that do not contribute to congestion may be referred to as head-of-line blocking. Such head-of-line blocking is undesirable as it unnecessarily reduces the data transmission efficiency of the data-switch while not measurably contributing to resolution of data congestion in the data-switch fabric.